SES でメール送信をしている IAM ユーザーをコンソール上から調査してみた
お疲れ様です。AWS 事業本部の平根です。
SES でメール送信を行なっている IAM ユーザーをマネジメントコンソール上から調査する方法について確認をする機会がありましたので、ご紹介したいと思います。
いきなりまとめ
SES でメール送信が行われると、コンソール上で確認可能な以下の項目が更新されるため、どの IAM ユーザーがメール送信を行っているかを簡易的に調査するのに活用できます。
SES でメール送信が行われると更新される項目
- IAM ユーザー画面の「最後に使用したアクセスキー」の時間が更新される
- IAM アクセスキーの「前回使用したサービス」が「ses」や「ses-smtp」に更新される
- IAM アクセスアドバイザーの Amazon SES の「最終アクセス日時」の時間が更新される
IAM アクセスキーの「前回使用したサービス」では最後に使用したサービスのみが表示され、IAM アクセスアドバイザーからはメール送信アクションが行われたことまでは明確には確認できない点には注意が必要です。
SES でのメール送信方法
SES でメール送信を行う方法には以下の 2 種類があります。
- SES API を利用したメール送信 [1]
- Simple Mail Transfer Protocol(SMTP)インターフェイスを利用したメール送信 [2]
[1]:Amazon SES API を使用して E メールを送信する
[2]:Amazon SES SMTP インターフェイスを使用して E メールを送信
メール送信をしている IAM ユーザーをコンソール上から調査する方法について
メール送信をしている IAM ユーザーを調査する際、まず CloudTrail を利用できないか考える方が多いのではないでしょうか。
しかし、CloudTrail によって記録されるのは SES の「管理イベント」のみであり、メール送信などのアクションが含まれる「データイベント」は記録されないため、CloludTrail では調査をすることができません [3]。
[3]:CloudTrail 内の Amazon SES 情報
そこで今回は、以下の IAM 機能を利用して、どの IAM ユーザーが SES でメール送信をしているかコンソール上から調査可能か確認をしてみました。
- IAM アクセスキーの「前回使用したサービス」
- IAM ユーザー画面のセキュリティ認証情報タブにて、アクセスキー経由で前回使用されたサービスを確認することができます。
- IAM ユーザー画面のセキュリティ認証情報タブにて、アクセスキー経由で前回使用されたサービスを確認することができます。
- IAM アクセスアドバイザー
- IAM ユーザー画面のアクセスアドバイザータブでは、その IAM ユーザーがアクセス可能なサービスのリストや、過去のアクセス履歴を確認することができます[4]。
意図せぬサービスへアクセスしていないか調査することができ、 IAM リソースの権限整理に活用できます。
[4]:IAM の最終アクセス情報の表示
- IAM ユーザー画面のアクセスアドバイザータブでは、その IAM ユーザーがアクセス可能なサービスのリストや、過去のアクセス履歴を確認することができます[4]。
今回実施する内容
今回はサンドボックス状態で確認を行うため、メール送信および受信に利用するメールアドレスは事前に SES の ID に登録し、検証まで完了させています。
以下の方法で SES によるメール送信を行います。
- SES API によるメール送信
- メール送信用の IAM ユーザー、アクセスキーを作成し、CLI を利用して SES API によるメール送信を行います。
- SMTP インターフェイスを利用したメール送信
- SES の SMTP 認証情報を作成します。
- Openssl を使用して SES の SMTP インターフェイスに接続し、メール送信を行います。
上記それぞれの方法でメール送信を行う前後で、
IAM アクセスキーの「前回使用したサービス」や IAM アクセスアドバイザーの「最終アクセス日時」の情報がどのように更新されるかをそれぞれ確認します。
確認結果
SES API によるメール送信での確認結果
SES API によるメール送信
メール送信用 IAM ユーザーとしてAdministrator ロールを付与した「ses-test-api-user」を作成しました。
まだ メール送信 を行っていないため IAM アクセスキーの「前回使用したサービス」の確認すると「N/A」と表示されています。
IAM アクセスアドバイザー Amazon SES の「最終アクセス日時」を確認すると、「追跡期間中はアクセスされていません」と表示されています。
以下のコマンドで SES API でのメール送信を行います。
$ aws ses send-email \
--sender@mail.xxxx.yyyy \
--recipient@mail.xxxx.yyyy \
--subject 'Test API Sending' \
--text 'API-Mail-Sending-Test' \
メール送信後の「最後に使用したアクセスキー」、「前回使用したサービス」の更新確認
メールが届いていることを確認後、IAM ユーザー一覧の画面から「最後に使用したアクセスキー」を確認すると、時間が直近に更新されていました。
IAM アクセスキーの「前回使用したサービス」が「ses」に更新されていました。
IAM アクセスアドバイザーの Amazon SES の「最終アクセス日時」が「今日」に更新されていました。
以上から、SES API によるメール送信が行われると、IAM アクセスキーの「前回使用したサービス」や IAM アクセスアドバイザーの「最終アクセス日時」が更新され、 SES が利用されたことを確認できることが分かりました。
しかし、実際にメール送信アクションを行ったことまでは確認することができませんでした。
補足
IAM アクセスアドバイザーでは CloudTrail で記録される管理イベントであれば最終アクセス情報の記録がサポートされており、アクションレベルでアクセス履歴を確認することができます[5]。
今回の SES のメール送信は「データイベント」であるためアクションレベルではアクセス履歴は記録されません。
[5]:アクションの最終アクセス情報をサポートするアクション
SMTP インターフェイスを利用したメール送信での確認結果
SMTP 認証情報の作成
Amazon SES の画面から SMTP 認証情報を作成します。
作成後は認証情報をダウンロード可能です。
SMTP の認証情報が発行され、AmazonSesSendingAccess ロールが付与された ses-smtp-user.20240630-161404(作成日時) という IAM ユーザーが作成されました。
まだメール送信を行っていないので IAM アクセスキーの「前回使用したサービス」を確認すると「N/A」と表示されています。
IAM アクセスアドバイザーの「最終アクセス日時」を確認すると、「追跡期間中はアクセスされていません」と表示されています。
SMTP インターフェースによるメール送信
先ほど作成した SMTP 認証情報を以下コマンドでそれぞれエンコードします。
echo -n "{AWS アクセスキー ID}" | base64
echo -n "{SMTP パスワード}" | base64
テキストファイル(smtptest.txt)を新規作成し、以下内容を記載します。
EHLO mail.xxxx.yyyy
AUTH LOGIN
Base64EncodedSMTPUserName
Base64EncodedSMTPPassword
MAIL FROM:sender@mail.xxxx.yyyy
RCPT TO:aaaakjs2aj7bgmsu4z6lcuku2y@classmethod.org.slack.com
DATA
From: sender@mail.xxxx.yyyy
To: recipient@mail.xxxx.yyyy
Subject: Amazon SES SMTP Test
SMTP Sending Test
.
QUIT
補足:テキストファイル中の下記内容はそれぞれ置き換えています。
- mail.xxxx.yyyy ... 検証済みの SES ドメイン
- Base64EncodedSMTPUserName ... 上記でエンコードした AWS アクセスキー ID
- Base64EncodedSMTPPassword ... 上記でエンコードした SMTP パスワード
以下のコマンドで、作成したファイルを指定してメールを送信します。
ap-northeast-1.amazonaws.com には、SES を設定したリージョンに対応したエンドポイントを記載します。
$ openssl s_client -crlf -quiet -starttls smtp -connect email-smtp.ap-northeast-1.amazonaws.com:587 < smtptest.txt
メール送信後の「最後に使用したアクセスキー」、「前回使用したサービス」の更新確認
メールが届いていることを確認後、IAM ユーザー一覧の画面から「最後に使用したアクセスキー」を確認すると、時間が直近に更新されていました。
IAM アクセスキーの「前回使用したサービス」が「ses-smtp」に更新されていました。
IAM アクセスアドバイザーの Amazon SES の「最終アクセス日時」が「今日」に更新されていました。
以上から、SMTP インターフェイスを利用してメール送信を行うと、IAM アクセスキーの「前回使用したサービス」や、IAM アクセスアドバイザーの「最終アクセス日時」が更新され、SES が利用されたことを確認できることが分かりました。
IAM アクセスキーの「前回使用したサービス」が「ses-smtp」へ更新されるため、SMTP インターフェイスが利用された事を明示的に確認できます。
一方、IAM アクセスアドバイザーでは SES を利用していることは確認できましたが、SMTP インターフェースを利用してメール送信が行われたことまでは確認できませんでした。
まとめ
SES でのメール送信を行った際に、IAM アクセスキーの「前回使用したサービス」やアクセスアドバイザーの Amazon SES の「最終アクセス日時」が更新されることを確認できました。
「最後に使用したアクセスキー」が最近の IAM ユーザーについて、 IAM アクセスキーや IAM アクセスアドバイザーの上記情報を確認することで、直近で SES でメール送信を行っている可能性のあるユーザーを調査することが可能です。
IAM アクセスキーの「前回使用したサービス」では最後に使用したサービスのみが表示され、IAM アクセスアドバイザーからはメール送信アクションが行われたことまでは明確には確認できない点には注意が必要です。
今回ご紹介した方法は、SES の不正利用などにより意図せずメール送信が行われているケースなど、送信を行なっているユーザーをいち早く絞り込みたい場合に有用な方法であると考えられます。
おまけ
SES で行われたメール送信について、より詳細な情報を確認したい場合には SES 送信イベントの取得によるモニタリングをご検討ください [6]。
送信されたメールについて、送信元 IAM ユーザーや SES へアクセスしているクライアント IP、送信元や送信先のメールアドレスなどの詳細情報を確認することができます。
※事前に取得設定を行う必要があります。
[6]:Amazon SES イベント発行を使用して E メール送信をモニタリングする
また、 SES 送信イベントからメール送信元の IAM ユーザーを確認する方法について、以下のブログに紹介されておりますのでご参照ください。
この記事がどなたかのお役に立つと幸いです。
以上、平根でした!